package org.pjmi.conversormonedaletra.bo.impl;

import org.pjmi.conversormonedaletra.beans.MonedaEntero;
import org.pjmi.conversormonedaletra.bo.MonedaTraductorBo;
import org.pjmi.conversormonedaletra.commons.NombresNumerosPesos;

/**
 * Implementacion para la traduccion de una cantidad en pesos
 * @author Pedro Josue Mendoza Islas.
 */
public class PesosTraductorBoImpl implements MonedaTraductorBo{
    
    /**
     * Metodo para obtener el nombre de una cantidad de mayor a 10 y menor a 99.
     * @param monto Objeto que almacena la cantidad a traducir.
     * @return La representacion escrita de la cantidad proporcinada.
     */
    public String getNombreDecenasUnidades(MonedaEntero monto) {
        StringBuilder letras = new StringBuilder();
        if(monto.getDecenas() == 1) {
            if(monto.getUnidades() < 6) {
                letras.append(NombresNumerosPesos.nombresEspeciales().get(monto.getUnidades()));
            } else {
                letras.append(NombresNumerosPesos.nombresDecenas().get(monto.getDecenas()))
                        .append(NombresNumerosPesos.ESPACIO)
                        .append(NombresNumerosPesos.Y)
                        .append(NombresNumerosPesos.ESPACIO)
                        .append(NombresNumerosPesos.nombresUnidades().get(monto.getUnidades()));
            }
            
        } else if(monto.getDecenas() == 2) {
            letras.append(NombresNumerosPesos.VEINTI)
                    .append(NombresNumerosPesos.nombresUnidades().get(monto.getUnidades()));
        } else {
            letras.append(NombresNumerosPesos.nombresDecenas().get(monto.getDecenas()))
                    .append(NombresNumerosPesos.ESPACIO)
                    .append(NombresNumerosPesos.Y)
                    .append(NombresNumerosPesos.ESPACIO)
                    .append(NombresNumerosPesos.nombresUnidades().get(monto.getUnidades()));
        }
        return letras.toString();
    }
    
    /**
     * Metodo para obtener el nombre de una cantidad de mayor a 100 y menor a 999.
     * @param monto Objeto que almacena la cantidad a traducir.
     * @return La representacion escrita de la cantidad proporcinada.
     */
    public String getNombreCentenasDencenasUnidades(MonedaEntero monto) {
        StringBuilder letras = new StringBuilder();
        letras.append(NombresNumerosPesos.nombresCentenas().get(monto.getCentenas()))
                .append(NombresNumerosPesos.ESPACIO)
                .append(getNombreDecenasUnidades(monto));
        
        return letras.toString();
    }
    
    /**
     * Metodo para obtener el nombre de una cantidad de mayor a 100 y menor a 999,
     * la cantidades no deben tener decenas, es decir solo sera para cantidades
     * como 101, 102, 203, 304, 509, etc.
     * @param monto Objeto que almacena la cantidad a traducir.
     * @return La representacion escrita de la cantidad proporcinada.
     */
    public String getNombreCentenasUnidades(MonedaEntero monto) {
        StringBuilder letras = new StringBuilder();
        if(monto.getCentenas() == 1) {
            letras.append(NombresNumerosPesos.CIENTO)
                    .append(NombresNumerosPesos.ESPACIO)
                    .append(NombresNumerosPesos.nombresUnidades().get(monto.getUnidades()));
        } else  {
            letras.append(NombresNumerosPesos.nombresCentenas().get(monto.getCentenas()))
                    .append(NombresNumerosPesos.ESPACIO)
                    .append(NombresNumerosPesos.nombresUnidades().get(monto.getUnidades()));
        }
        return letras.toString();
    }
}
